package com.crawler.html;

import java.io.IOException;
import java.net.MalformedURLException;

import com.crawler.dto.Parameter;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;

public interface WebSite {
    /**
     * 
     * 方法描述： 输入参数信息
     * 
     * @author TL
     * @date 2016年6月19日 下午12:21:25
     * @param parameter
     * @return
     */
    WebSite setParameter(Parameter parameter);

    /**
     * 
     * 方法描述： 手动输入验证码
     * 
     * @author TL
     * @date 2016年6月19日 下午12:21:58
     * @return
     * @throws IOException
     */
    WebSite enterCodeManually() throws IOException;

    /**
     * 
     * 方法描述： 使用第三方解析验证 收费的 识别效率高
     * 
     * @author TL
     * @date 2016年6月19日 下午12:22:35
     * @return
     * @throws IOException
     */
    WebSite enterCodeCharge() throws IOException;

    /**
     * 
     * 方法描述：返回结果
     * 
     * @author TL
     * @date 2016年6月19日 下午12:24:58
     * @return
     * @throws IOException
     * @throws MalformedURLException
     * @throws FailingHttpStatusCodeException
     */
    Parameter resultsOf() throws FailingHttpStatusCodeException, MalformedURLException, IOException;

    /**
     * 方法描述： 关闭
     * 
     * @author TL
     * @date 2016年6月19日 下午3:28:27
     */
    void close();

    /**
     * 方法描述： 打开网址
     * 
     * @author TL
     * @throws IOException
     * @throws MalformedURLException
     * @throws FailingHttpStatusCodeException
     * @date 2016年6月25日 下午5:45:28
     */
    WebSite openUrl() throws FailingHttpStatusCodeException, MalformedURLException, IOException;

    /**
     * 方法描述： 设置代理
     * 
     * @author TL
     * @date 2016年6月25日 下午5:50:30
     * @param proxyHost
     * @param proxyPort
     * @param username
     * @param password
     * @return
     */
    WebSite setProxy(String proxyHost, int proxyPort, String username, String password);
    
    /**
     * 方法描述： 设置代理
     * 
     * @author TL
     * @date 2016年6月25日 下午5:50:30
     * @param proxyHost
     * @param proxyPort
     * @return
     */
    WebSite setProxy(String proxyHost, int proxyPort);
}
